package com.jkkc.lib.base.extend

import com.blankj.utilcode.util.GsonUtils
import java.io.File

/**
 * Author:LiXian
 * <p>
 * Desc:字符串扩展函数
 * Version:1.0
 * date 2023/2/28 15:50
 */

/**
 * 字符串不为空判断
 */
fun String?.isNotNullOrEmpty(): Boolean = !this.isNullOrEmpty()

/**
 * 获取字符串或者Null，字符串不为空，返回自己，为空，返回Null
 */
fun String?.getStrOrNull(): String? = this.takeIf { isNotNullOrEmpty() }

/**
 * 获取字符串或者Null，字符串不为空，返回自己，为空，返回默认值
 */
fun String?.getStrOrDefault(default: String): String = getStrOrNull() ?: default

/**
 * 字符串裁剪得到List
 */
fun String?.splitToList(vararg delimiters: String): List<String> {
    return this.getStrOrNull()?.split(*delimiters)?.toList() ?: listOf()
}

/**
 * 获取非空字符串
 */
fun String?.getStrNotEmpty(): String = getStrOrNull() ?: ""

/**
 * Json字符串转List
 */
inline fun <reified T> String?.jsonToList(): List<T> {
    return this.getStrOrNull()?.let {
        GsonUtils.fromJson(it, GsonUtils.getListType(T::class.java))
    }?: listOf()
}

/**
 * Json字符串转Bean
 */
inline fun <reified T> String?.jsonToBeanOrNull(): T? {
    return this.getStrOrNull()?.let {
        GsonUtils.fromJson(it, T::class.java)
    }
}

/**
 * String转Int，转换失败使用default值
 */
fun String?.toIntOrDefault(default: Int): Int = getStrOrNull()?.toIntOrNull() ?: default

/**
 * 是否存在空字符串
 */
fun String?.isExistEmpty(vararg temps: String?): Boolean {
    if (!isNullOrEmpty()) {
        temps.forEach {
            if (it.isNullOrEmpty()) {
                return true
            }
        }
        return false
    }
    return true
}

/**
 * 获取文件扩展名
 * 不包括{.}
 */
fun String.getExtensionName(file: File): String {
    return file.takeIf { it.name.contains(".") && file.isFile }?.let {
        it.name.substring(it.name.lastIndexOf(".") + 1)
    } ?: ""
}

/**
 * 文件的扩展名是否是extensionName
 *
 * @param file 文件
 * @param extensionName 扩展名
 */
fun String.isExtensionName(file: File, extensionName: String): Boolean {
    return getExtensionName(file) == extensionName
}

/**
 * 文件是否存在
 */
fun String.isFileExistsByPath(): Boolean = getFileOrNullByPath()?.let { true } ?: false

/**
 * 文件不存在
 */
fun String.isFileNotExists(): Boolean = !isFileExistsByPath()

/**
 * 删除文件
 */
fun String.deleteFileByPath(): Boolean = getFileOrNullByPath()?.delete() ?: true

/**
 * 路径获取文件
 */
fun String.getFileOrNullByPath() : File? = File(this).takeIf { it.exists() && it.isFile }

/**
 * 文件夹路径转File
 */
fun String.getFileDirOrNullByPath(): File? = File(this).takeIf { it.isDirectory && it.exists() }

/**
 * path路径文件夹中文件的数量
 */
fun String?.getFileCountByPath(): Int = getStrOrNull()?.getFileDirOrNullByPath()?.listFiles()?.size ?: 0
